package com.gjx.leetcode;

//2. 两数相加
//
//给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
//
//如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
//
//您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
//
//示例：
//
//输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出：7 -> 0 -> 8
//原因：342 + 465 = 807



class Solution002 {
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		
		if (l1 == null) {
			return l2;
		}
		
		if (l2 == null) {
			return l1;
		}
		
		if (l1.next == null && l1.val == 0) {
			return l2;
		}
		
		if (l2.next == null && l2.val == 0) {
			return l1;
		}
		
		int carry = 0;
		
		ListNode dummy = new ListNode(0);
		ListNode cur = dummy;
		
		while (l1 != null || l2 != null) {
			
			int left = 0;
			if (l1 != null) {
				left = l1.val;
				l1 = l1.next;
			}
			
			int right = 0;
			if (l2 != null) {
				right = l2.val;
				l2 = l2.next;
			}
			
			int sum = left + right + carry;
			
			carry = sum / 10;
			sum = sum % 10;
			
			cur.next = new ListNode(sum);
			cur = cur.next;
		}
		
		if (carry != 0) {
			cur.next = new ListNode(carry);
		}
		
		return dummy.next;
	}
}